TCP/IP协议简介

TCP/IP协议

TCP/IP协议的由来

在世界各地,各种不同电脑运行着各种不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法千差万别,无法合作。所以人们就想方设法将它们联合起来,发挥出它们最大的潜力。但简单连接起来是不够的,它们还需要定义一些共同的东西来进行交流沟通,TCP/IP协议由此而生。

TCP/IP协议简介

TCP/IP协议不是一个协议,而是一个协议簇的统称。里面包括:HTTP、FTP、SMTP、SIP、SNMP、TCP、UDP、SCTP、ICMP、ARP、PPP等等。

TCP/IP协议中有一个重要的概念是分层。按照层次分为以下四层:

  • 链路层: 用来处理网络的硬件部分。包括操作系统、硬件的设备驱动、NIC(NetWork Interface card 即网卡)、以及光纤等物理可见部分。还包括连接器等传输媒介。硬件上的范畴均在链路层的作用范围之内
  • 网络层: 用来处理在网络上流动的数据包。数据包是网络传输的最小单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传给对方。 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多选项内选择一条传输路径
  • 传输层:TCP(Transmission Control Protocol传输控制协议 )、UDP(User Data Protocol用户数据报协议)
  • 应用层: FTP(File Transfer Protocol文件传输协议)、DNS(Domain Name System域名系统)、HTTP(Hyper Text Transfer Protocol超文本传输协议)

网络上的TCP/IP通信数据流如下:
发送端每通过一层则增加首部,接收端每通过一层则删除首部
发送端: 应用层(HTTP数据)———————传输层(HTTP数据增加了TCP首部)————网络层(在传输层传过来的数据增加了IP首部)————链路层(增加了以太网首部)
接收端:从链路层到应用层每通过一层删除相应的首部

基本常识

  • 互联网地址(IP地址)
    网络上每一个节点都必须有一个独立的Internet地址(也叫做IP地址)。现在,通常使用的IP地址是一个32bit的数字,也就是我们常说的IPv4标准,这32bit的数字分成四组,也就是常见的255.255.255.255的样式。IPv4标准上,地址被分为五类,我们常用的是B类地址。具体的分类请参考其他文档。需要注意的是IP地址是网络号+主机号的组合,这非常重要。
  • 域名系统
    域名系统是一个分布的数据库,它提供将主机名(就是网址啦)转换成IP地址的服务。
  • RFC
    RFC就是tcp/ip协议的标准文档
  • 端口号(port)
    服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP (简单文件传送协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用知名的1~1023之间的端口号。这些知名端口号由Internet号分配机构(Internet Assigned Numbers Authority, IANA)来管理。知名端口号介于1~255之间;256~1023之间的端口号通常都是由Unix系统占用,以提供一些特定的Unix服务;1024~5000端口号用于客户端分配临时端口号;大于5000的端口号是为其他服务器预留的。

TCP/IP协议之HTTP协议

HTTP全称是HyperText Transfer Protocal,即:超文本传输协议,从1990年开始就在WWW上广泛应用,是现今在WWW上应用最多的协议, Http是应用层协议,当你上网浏览网页的时候,浏览器和Web服务器之间就会通过HTTP在Internet上进行数据的发送和接收。Http是一个基于请求/响应模式的、无状态的协议。即我们通常所说的Request/Response。

TCP/IP协议之TCP协议

TCP协议属于传输层,提供可靠的字节流服务。即将大块数据分割成以报文段(sagment)为单位的数据包进行管理。而可靠的传输服务是指能把数据准确可靠的传给对方。简而言之,TCP为了更容易传送大数据才发数据分割,并且能够确认数据最终是否达到对方。

为了确保信息能够准确无误的到达,TCP采用了著名的三次握手,四次分手策略。
连接时的三次握手:

  1. 建立连接时,客户端发送SYN包(SYN=i)到服务器,并进入到SYN-SEND状态,等待服务器确认。
  2. 服务器收到SYN包,必须确认客户的SYN(ack=i+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器进入SYN-RECV状态。
  3. 客户端收到服务器的SYN+ACK包,向服务器发送确认报ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
    断开是的四次挥手
  4. 客户端发送一个FIN,用来关闭客户到服务器的数据传送。
  5. 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  6. 服务器关闭与客户端的连接,发送一个FIN给客户端。
  7. 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

    客户端在进入到TIME-WAIT状态后,并不会马上释放TCP,必须经过时间等待计时器设置的时间2MSL(最长报文段寿命),才进入到CLOSED状态。为什么?

    1. 为了保证发送的最后一个ACK报文段能够达到服务器
    2. 防止“已失效的连接请求报文段”出现在本连接中

TCP/IP协议之UDP协议

TCP/IP协议之IP协议

IP(internet protocol),这里IP不是指我们通常所说的IP地址(如192.168.1.1),而是一种协议。IP协议的作用在于把各种各样的数据包准确无误的传递给对方,其中两个重要的条件是IP地址和MAC地址(Media Access Control Address).

TCP/IP协议之DNS协议